#ifndef __LIB_USER_SYSCALL_H
#define __LIB_USER_SYSCALL_H

#include <stdbool.h>
#include <debug.h>
#include "threads/thread.h"

/* Process identifier. */
typedef int pid_t;
typedef int mapid_t;
#define PID_ERROR ((pid_t) -1)

void syscall_init (void);


/* Projects 2 and later. */
void halt (void) NO_RETURN;
void exit (int status) NO_RETURN;
pid_t exec (const char *file);
int wait (pid_t);
bool create (const char *file, unsigned initial_size);
bool remove (const char *file);
int open (const char *file);
int filesize (int fd);
int read (int fd, void *buffer, unsigned length);
int write (int fd, const void *buffer, unsigned length);
void seek (int fd, unsigned position);
unsigned tell (int fd);
void close (int fd);
void acquire_file_lock();
void release_file_lock();

void unmap (struct FileMapping *m);
mapid_t mmap(int fd, void* addr);
void muunmap(mapid_t mapping);
#endif /* userprog/syscall.h */
